package com.htjc.integral.activity.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;

import com.htjc.integral.model.activity.EcBpSignBlackIp;
import com.htjc.integral.model.activity.EcBpSignNum;
import com.htjc.integral.model.activity.EcBpSignRecord;
import com.htjc.integral.model.activity.EcPromotionParamValueSimple;
import com.htjc.integral.model.activity.EcPromotionSimple;
import com.htjc.integral.model.activity.SignDetail;

/**
 * 签到mapper
 * @author zw
 *
 */
@Mapper
public interface EcBpSignInMapper {
	
	/**
	 * 查询该IP是否为黑名单IP
	 * @param ip
	 * @return
	 */
    int selectBlackUser(String ip);
    
    /**
     * 查询该IP近10S内是否签到过
     * @param ip
     * @return
     */
    int selectTenSTimes(Map<String, Object> params);
    
    /**
     * 新增黑名单IP
     * @param blackIp
     * @return
     */
    int insertOneBlackIP(EcBpSignBlackIp blackIp);
    
    /**
     * 查询该IP今天签到次数
     * @param ip
     * @return
     */
    int selectTodayIP(String ip);
    
    /**
     * 根据促销活动定义编号和时间来查询活动
     * @param promotionDefineId
     * @return
     */
    List<EcPromotionSimple> selectPromotionInfoByDefineIdAndTime(String promotionDefineId);
    
    /**
     * 根据统一用户ID查询今天的签到记录
     * @param unId
     * @return
     */
    List<EcBpSignRecord> selectSignedRecordByToday(String unId);
    
    /**
     * 根据统一用户ID查询签到次数
     * @param unId
     * @return
     */
    EcBpSignNum selectByUserAccount(String unId);
    
    /**
     * 根据促销活动编号和促销活动定义编号查询签到规则
     * @param params
     * @return
     */
    List<EcPromotionParamValueSimple> selectValueByPromotionIdAndDefineId(Map<String, String> params);
    
    /**
     * 更新签到活动剩余积分
     * @param params
     * @return
     */
    int updateResidualIntegral(Map<String, Object> params);
    
    /**
     * 插入一条用户签到次数信息
     * @param oneSignNum
     */
    void insertOneSignNum(EcBpSignNum oneSignNum);
    
    /**
     * 更新用户签到次数信息
     * @param oneSignNum
     * @return
     */
    int updateSignNum(EcBpSignNum oneSignNum);
    
    /**
     * 插入一条用户签到积分记录
     * @param oneSignRecord
     */
    void insertOneRecord(EcBpSignRecord oneSignRecord);
    
    /**
     * 根据统一用户ID查询签到天数
     * @param unId
     * @return
     */
    List<EcBpSignRecord> selectSignedRecord(Map<String, String> params);
    
    /**
     * 查询该用户是否签到过
     * @param unId
     * @return
     */
    int selectUserIsSign(String unId);
    
    /**
     * 获取签到记录的三部分信息 签到时间，奖励说明，奖励积分数 分页
     * @param params
     * @return
     */
    List<Map<String, Object>> selectSignDetailByUser(Map<String, Object> params);
    
    /**
     * 查询该用户累计签到次数
     * @param unId
     * @return
     */
    int selectSignTotleNum(String unId);
    
    /**
     * 查询该用户连续签到次数
     * @param unId
     * @return
     */
    Integer selectSignSequentNum(Map<String, Object> params);
    
    /**
     * 查询该用户本月签到次数
     * @param unId
     * @return
     */
    int selectSignPreMonthNum(Map<String, Object> params);
    
    /**
     * 查询该用户签到积分总数
     * @param unId
     * @return
     */
    int selectSignPointSum(String unId);
    
    /**
     * 查询该用户签到记录总数
     * @param unId
     * @return
     */
    int selectSignDetailCount(String unId);
    
    /**
     * 促销活动定义编号查签到活动
     * @param unId
     * @return
     */
    List<EcPromotionSimple> selectPromotionInfoByDefineId(String promotionDefineId);
}